package es.javamyadmin.servlet;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import es.javamyadmin.beans.ListaTablesBean;
import es.javamyadmin.beans.LoginBean;
import es.javamyadmin.modelo.ModelFacade;
import es.javamyadmin.pojo.Mensaje;
/**
 * Servlet que importa la base de datos
 * @author Emili Javier Castillo Gonzalez
 * @author
 *
 */
public class ImportarBDServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5799483296382532764L;

	/**
	 * Metodo que llama al metodo doPost
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * Metodo que importa la base de datos
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		ServletContext context = getServletContext();		
		String ubicacionArchivo = context.getRealPath("/");
		InputStream path = getServletContext().getResourceAsStream("/WEB-INF/properties/mensajes.properties");
		String rutaArchivo = "";
		
		/*VALIDACIONES PARA COMPROBAR EL ARCHIVO DE IMPORTACIÓN QUE LLEGA*/
		int error = 0;
		String fail = "";
		
		try {
			
			@SuppressWarnings("unused")
			int i = 1;
			
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			
			upload.setHeaderEncoding("UTF-8");
			
			List<FileItem> items = upload.parseRequest(request);
			File base = new File(ubicacionArchivo+"/temp/");
			
			//Para pruebas en Local
			//File base = new File("/images/sql/");
						
			for (Object item : items) {

				FileItem uploaded = (FileItem) item;
	            
				// SI NO ES UN CAMPO NORMAL (ES EL CAMPO PARA SUBIR FICHERO)
				if (!uploaded.isFormField()) {
					
					String nombreParametro = uploaded.getFieldName();
					String  nombreArchivo=uploaded.getName();							
					
					// VALIDAR ARCHIVO
					if(nombreParametro.equals("importBD")){
						
						if(nombreArchivo.equals("")){
							fail="NO has elegido ningun ARCHIVO.";
							error = 1;
							break;
						}else{
							
							String extension=nombreArchivo.substring(nombreArchivo.lastIndexOf("."));
	
							if(!extension.toLowerCase().equals(".sql")){
								fail= Mensaje.getMensaje(path, "5007");
								error = 1;
								break;
							}
							
							base.mkdirs();
							
							File fichero = new File(base, nombreArchivo);
							uploaded.write(fichero);
							
							rutaArchivo = ubicacionArchivo+"temp/"+nombreArchivo;
						}
					}
					
					i++;
				}
			}
			
			
		} catch (FileUploadException e) {
			e.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}
		
		if(error==0){
			
			/*Cargo el Bean con los datos para hacer la conexión con la Base de Datos*/
			LoginBean datosLogin = new LoginBean();	
			datosLogin = (LoginBean) request.getSession().getAttribute("datosLogin");
			
			String user = datosLogin.getUserSQL();     
	        String pass = datosLogin.getPassword();
	        String host = datosLogin.getServidor();
	        String port = datosLogin.getPuerto();
			
	        /*Cargo el Bean con los datos de la BD que quiero exportar*/
	        ListaTablesBean listaTablesBean = new ListaTablesBean();		
			listaTablesBean = (ListaTablesBean) request.getSession().getAttribute("listaTablesBean");
			
			String bd = listaTablesBean.getDatabase();
			
			Boolean errorImportar = false;
			
			errorImportar = ModelFacade.importBD(user, pass, host, port, bd, rutaArchivo);
			
			/*Dependiendo si ha habido algun error o no redirijo y muestro mensaje*/
			if(errorImportar){
				request.setAttribute("error", Mensaje.getMensaje(path, "5008"));			
				request.getRequestDispatcher("jsp/lista-tablas-bd.jsp").forward(request,response);
				
			}else{
				request.setAttribute("ok", Mensaje.getMensaje(path, "5009"));
				request.getRequestDispatcher("jsp/lista-tablas-bd.jsp").forward(request,response);
			}
			
		}else{
			request.setAttribute("error", fail);			
			request.getRequestDispatcher("jsp/importar-bd.jsp").forward(request,response);
		}
				
	}

}